<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>
  // 1. 封装函数：不改变原数组的情况下，取出数组的最大值和最小值
  //   - max(arr)
  //   - min(arr)

  function max(arr){
    return arr.slice(0).sort(function(a,b){
      return b-a;
    })[0];

    // return arr.map(function(val){
    //   return val;
    // }).sort(function(a,b){
    //   return b-a;
    // })[0];

    // var m = arr[0];
    // for(var j=1;j<arr.length;j++){
    //   if(m<arr[j]){
    //     m = arr[j];
    //   }
    // }
    // return m;
  }
  var arr = [ 4,7,2,8,1,9,5 ];
  console.log(max(arr));
  console.log(arr);

  // 2. 范围随机数
  function random(max, min){
    if(max<min){
      var x = min;
      min = max;
      max = x;
    }
    return Math.floor(Math.random()*(max-min+1)+min);
  }

  // 3. 随机十六进制的颜色值
  //   - "#0a7004"
  function randomColor(){
    var r = random(0, 255).toString(16);
    var g = random(0, 255).toString(16);
    var b = random(0, 255).toString(16);
    
    return "#" + createZero(r) + createZero(g) + createZero(b);
  }
  // console.log(randomColor())

  // 一位字符，开头补零
  function createZero(data){
    if(data.length < 2){
      return "0"+data
    }
    return data;
  }


  // 3. 随机rgb的颜色值
  //   - "rgb(23, 156, 82)"
  function randomRGB(){
    return "rgb("+ random(0,255) +","+ random(0,255) +","+ random(0,255) +")";
  }
  // console.log(randomRGB())


  // 4. 封装 随机一个4位数字的验证码 的函数
  //   - 如：0987
  function randomNumber(n){
    var str = "";
    for(var i=0;i<n;i++){
      str += random(0,9);
    }
    return str;
  }
  // console.log(randomNumber(4))


  // 5. 封装 随机一个4位数字字母混合的验证码 的函数
  //   - 如：6a4h
  function randomString(n){
    // 随机字符库
    var str = ""
    for(var i=0;i<50;i++){
      str += random(0, 9);
      str += String.fromCharCode(random(65, 90));
      str += String.fromCharCode(random(97, 122));
    }
    // 从随机字符库中再随机取4个
    var s = ""
    for(var i=0;i<n;i++){
      s += str[random(0, str.length-1)]
    }
    return s;
  }
  // console.log(randomString(4))


  // 5. 封装 可以传入两个日期 的函数，实现计算两个日期之间的差值的功能
  //   - return {day: x, hours: x, minutes: x, secondes: x}
  //   - 实现
  //     - 同时传入两个日期参数，表示计算这两个指定日期的差值
  //     - 只传入一个日期参数，表示计算当前日期距离指定日期的差值

  function dateDiff(d1, d2){
    if(!d1) {
      console.error("缺少必传参数")
      return;
    }

    var t1 = new Date(d1);
    var t2 = d2 ? new Date(d2) : new Date();

    var time = Math.abs(t1.getTime() - t2.getTime())

    var day = parseInt(time/1000/60/60/24);
    var hour = parseInt((time - (day*24*60*60*1000))/1000/60/60);

    var obj = {}
    obj.day = day;
    obj.hour = hour;
    
    return obj;
  }
  // console.log(dateDiff("2000.1.1 10:5:3", "2008.8.8 8:8:0"))
  // console.log(dateDiff("2000.1.1 10:5:3"))

</script>
</html>